package com.molichuxing.services.infrastructure.service;

import java.util.List;
import java.util.Map;

import com.molichuxing.framework.service.RootService;
import com.molichuxing.services.infrastructure.dto.response.RegionCityDto;
import com.molichuxing.services.infrastructure.dto.response.RegionDto;
import com.molichuxing.services.infrastructure.dto.response.RegionInfoDto;

public interface RegionService extends RootService {

	/**
	 * 获取所有省市区信息
	 * 
	 * @return
	 */
	List<RegionDto> getAll();

	/***
	 * 根据省id 获取城市信息 市ID 获取区县
	 * 
	 * @return
	 */
	List<RegionDto> getCityListByProvinceId(Integer provinceId);

	/***
	 * 根据省id 获取城区
	 * 
	 * @return
	 */
	List<RegionDto> getAreaListByProvinceId(Integer provinceId);

	/***
	 * 根据区id获取省市区信息
	 * 
	 * @param areaId
	 * @return
	 */
	RegionInfoDto getCityNameByAreaId(Integer areaId);

	/***
	 * 根据区id获取省市区信息
	 * 
	 * @param areaId
	 * @return
	 */
	List<RegionInfoDto> getCityNameByAreaIds(List<Integer> areaId);

	/***
	 * 根据市id 查询省市名称 省市id
	 * 
	 * @param cityId
	 * @return
	 */
	RegionInfoDto getCityNameByCityId(Integer cityId);

	/****
	 * 根据市id 返回省市名称
	 * 
	 * @param cityIds
	 * @return
	 */
	Map<Integer, RegionInfoDto> getRegionInfoListByIds(List<Integer> cityIds);

	/**
	 * 查询省市县并有层级关系
	 * 
	 * @return
	 */
	List<RegionCityDto> getAllCity(Integer level);

	/**
	 * 查询省市县并有层级关系   区域id集合
	 * @param level
	 * @param regionIdList
	 * @return
	 */
	List<RegionCityDto> getAllCityByRegionId(Integer level, List<Integer> regionIdList);

	/**
	 * 根据市id查询省信息
	 * 
	 * @param cityIds
	 *            市id
	 * @return
	 */
	List<RegionInfoDto> getProvincesByCityIds(List<Integer> cityIds);

	/**
	 * 根据省id查询所有省下市id
	 * 
	 * @param provinceId
	 *            省id
	 * @return
	 */
	public List<Integer> getCityIdsByProvinceId(Integer provinceId);


	/***
	 * 根据百度code获取城市信息
	 *
	 * @param baiduCode
	 * @return
	 */
	RegionDto getCityByBaiduCode(String baiduCode);


	/**
	 * 根据区域id按首字母排序
	 * @param regionIds
	 * @return
	 */
	Map<String, List<RegionDto>> getCityByInitial(List<Integer> regionIds);
}
